package Operaciones;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.Calendar;

import Flight.ArrivalFlight;
import Flight.DepartureFlight;
import Flight.Flight;

public class Ficheros {
	// --------------------- LECTURA FLIGHT ARRIVAL ----------------------------
	public static ArrayList<Flight> vuelosLlegadas(String nameFile){
		
		ArrayList<Flight> aux = new ArrayList<Flight>();
		
		File archivo = null;
		FileReader fr = null;	
		BufferedReader br = null;

		try {
			// Apertura del fichero y creacion de BufferedReader para poder
			// hacer una lectura comoda (disponer del metodo readLine()).
			archivo = new File (nameFile);
			fr = new FileReader (archivo);
			br = new BufferedReader(fr);

			// Lectura del fichero
			String linea;
			while((linea=br.readLine())!=null){
				Flight f = createFlightArrival(linea);
				aux.add(f);
			}
		}
		catch(Exception e){
			e.printStackTrace();
		}finally{
			// En el finally cerramos el fichero, para asegurarnos
			// que se cierra tanto si todo va bien como si salta 
			// una excepcion.
			try{                    
				if( null != fr ){   
					fr.close();     
				}                  
			}catch (Exception e2){ 
				e2.printStackTrace();
			}
		}
		return aux;
	}
	
	private static ArrivalFlight createFlightArrival(String lineFile){
		String [] datos = lineFile.split("\t");

		int yearArrival = Integer.parseInt(datos[0]);
		int monthArrival = Integer.parseInt(datos[1]);
		int dayArrival = Integer.parseInt(datos[2]);
		int hourArrival = Integer.parseInt(datos[3]);
		int minuteArrival = Integer.parseInt(datos[4]);
		
		Calendar arrivalTime = Calendar.getInstance();
		arrivalTime.set(yearArrival, monthArrival, dayArrival, hourArrival, minuteArrival,0);
		
		int yearDeparture = Integer.parseInt(datos[5]);
		int monthDeparture = Integer.parseInt(datos[6]);
		int dayDeparture = Integer.parseInt(datos[7]);
		int hourDeparture = Integer.parseInt(datos[8]);
		int minuteDeparture = Integer.parseInt(datos[9]);
		
		Calendar departureTime = Calendar.getInstance();
		departureTime.set(yearDeparture, monthDeparture, dayDeparture, hourDeparture, minuteDeparture,0);
		
		String numberFlight = datos[10];
		String sourceFlight = datos[11];
		String dstFlight = datos[12];
		String status = datos[13];
		String room = datos[14];
		
		return new ArrivalFlight(departureTime,arrivalTime,numberFlight,sourceFlight,dstFlight,status,room);
	}
	
	// ------------------------ END FLIGHT ARRIVAL -------------------------------

	// --------------------- LECTURA FLIGHT DEPARTURE ----------------------------
	public static ArrayList<Flight> vuelosSalidas(String nameFile){
		
		ArrayList<Flight> aux = new ArrayList<Flight>();
		
		File archivo = null;
		FileReader fr = null;	
		BufferedReader br = null;

		try {
			// Apertura del fichero y creacion de BufferedReader para poder
			// hacer una lectura comoda (disponer del metodo readLine()).
			archivo = new File (nameFile);
			fr = new FileReader (archivo);
			br = new BufferedReader(fr);

			// Lectura del fichero
			String linea;
			while((linea=br.readLine())!=null){
				Flight f = createFlightDeparture(linea);
				aux.add(f);
			}
		}
		catch(Exception e){
			e.printStackTrace();
		}finally{
			// En el finally cerramos el fichero, para asegurarnos
			// que se cierra tanto si todo va bien como si salta 
			// una excepcion.
			try{                    
				if( null != fr ){   
					fr.close();     
				}                  
			}catch (Exception e2){ 
				e2.printStackTrace();
			}
		}
		return aux;
	}
	
	private static DepartureFlight createFlightDeparture(String lineFile){
		String [] datos = lineFile.split("\t");

		int yearArrival = Integer.parseInt(datos[0]);
		int monthArrival = Integer.parseInt(datos[1]);
		int dayArrival = Integer.parseInt(datos[2]);
		int hourArrival = Integer.parseInt(datos[3]);
		int minuteArrival = Integer.parseInt(datos[4]);
		
		Calendar departureTime = Calendar.getInstance();
		departureTime.set(yearArrival, monthArrival, dayArrival, hourArrival, minuteArrival,0);
		
		int yearDeparture = Integer.parseInt(datos[5]);
		int monthDeparture = Integer.parseInt(datos[6]);
		int dayDeparture = Integer.parseInt(datos[7]);
		int hourDeparture = Integer.parseInt(datos[8]);
		int minuteDeparture = Integer.parseInt(datos[9]);
		
		Calendar arrivalTime = Calendar.getInstance();
		arrivalTime.set(yearDeparture, monthDeparture, dayDeparture, hourDeparture, minuteDeparture,0);
		
		String numberFlight = datos[10];
		String sourceFlight = datos[11];
		String dstFlight = datos[12];
		String status = datos[13];
		
		int yearEmbar = Integer.parseInt(datos[14]);
		int monthEmbar = Integer.parseInt(datos[15]);
		int dayEmbar = Integer.parseInt(datos[16]);
		int hourEmbar = Integer.parseInt(datos[17]);
		int minuteEmbar = Integer.parseInt(datos[18]);
		
		Calendar embarTime = Calendar.getInstance();
		embarTime.set(yearEmbar, monthEmbar, dayEmbar, hourEmbar, minuteEmbar,0);
		
		String desk = datos[19];
		String gate = datos[20];
		
		return new DepartureFlight(departureTime,arrivalTime,numberFlight,sourceFlight,dstFlight,status,desk,embarTime,gate);
	}
}
